//引入请求数据的接口函数  需要传进skuid的参数
import { reqGetDtailInfo, reqGetShopCart } from "@/api"
//引入 uuid 的获取方法
import { getUUID } from '@/utils/uuid_token'

const actions = {
  // 在这 进行网络请求 拿到数据， 并到mutations 中处理数据
  async getDatilInfo({ commit }, skuid) {
    let result = await reqGetDtailInfo(skuid)
    if (result.code == 200) {
      commit('GETDATILINFO', result.data)
    }
  },
  //当点击加入购物车的时候 请求加入购物车页面的数据
  async getorUpdateShopCartInfo({ commit }, { skuId, skuNumber }) {

    let result = await reqGetShopCart(skuId, skuNumber)
      //这里我们发现服务器 并没有给我们返回额外的数据 ，只是把我们传过去的参数 写入到数据库之中
    console.log(result);
    //所以不需要再写 三连环了
    //这里我们是能知道 数据请求成功还是失败了，但是组件中并不知道
    //组件需要知道请求的结果  来决定是 跳转路由 还是给用户提示信息
    if (result.code == 200) {
      return 'ok'
        //promise 只要返回的结果是 非空字符串 那就是成功的意思
    } else {
      return Promise.reject(new Error('faile'))
    }

  }
}
const mutations = {
  GETDATILINFO(state, detailGoodsInfo) {
    //把拿到的数据 储存到detail 小仓库里
    state.detailGoodsInfo = detailGoodsInfo
  }
}
const state = {
    //看请求数据的默认值 默认是一个对象  配置好之后去detail组件dispatch
    detailGoodsInfo: {},
    //给详情页  添加 uuid 到仓库中 为了配置加入购物车
    uuid_token: getUUID()

  }
  //是为了简化 数据而生的
const getters = {
  //会接受一个state  这个state是当前的小仓库
  //导航路径区拿到的数据
  categoryView(state) {
    //当数据还没有返回回来的时候，detailGoodsInfo 打 点  会是一个undefind 
    //这样页面中拿到的就是 一个undefind 如果读undefind 打点  就会报错
    //所以传入一个空的 对应值  之后在写getters的时候也要时刻绷这个线
    return state.detailGoodsInfo.categoryView || {}
  },
  skuInfo(state) {
    return state.detailGoodsInfo.skuInfo || {}
  },
  //页面右侧 售卖属性参数整理一下
  spuSaleAttrList(state) {
    return state.detailGoodsInfo.spuSaleAttrList || []
  }

}


//暴露这个对象
export default { actions, mutations, state, getters }